Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java syntax</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_syntax"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_syntax rootpage-Java_syntax skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java syntax</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">See also: <a href="Java_(programming_language)#Syntax" title="Java (programming language)">Java (programming language) §&nbsp;Syntax</a></div>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<p class="mw-empty-elt">

</p>

<p>The <b>syntax of Java</b> is <a href="Syntax" title="Syntax">the set of rules</a> defining how a <a href="Java_(programming_language)" title="Java (programming language)">Java</a> program is written and interpreted.
</p><p>The <a href="Syntax_(programming_languages)" title="Syntax (programming languages)">syntax</a> is mostly derived from <a href="C_(programming_language)" title="C (programming language)">C</a> and <a href="C%2B%2B" title="C++">C++</a>. Unlike C++, Java has no global functions or variables, but has data members which are also regarded as <a href="Global_variable" title="Global variable">global variables</a>. All code belongs to <a href="Class_(computer_programming)" title="Class (computer programming)">classes</a> and all values are <a href="Object_(computer_science)" title="Object (computer science)">objects</a>. The only exception is the <a href="Primitive_data_types" class="mw-redirect" title="Primitive data types">primitive data types</a>, which are not considered to be objects for performance reasons (though can be automatically converted to objects and vice versa via <a href="#Boxing_and_unboxing">autoboxing</a>). Some features like <a href="Operator_overloading" title="Operator overloading">operator overloading</a> or <a href="Unsigned_integer" class="mw-redirect" title="Unsigned integer">unsigned integer</a> <a href="Data_type" title="Data type">data types</a> are omitted to simplify the language and avoid possible programming mistakes.
</p><p>The Java syntax has been gradually extended in the course of numerous major <a href="JDK" class="mw-redirect" title="JDK">JDK</a> <a href="Java_version_history" title="Java version history">releases</a>, and now supports abilities such as <a href="Generic_programming" title="Generic programming">generic programming</a> and <a href="Anonymous_function" title="Anonymous function">anonymous functions</a> (function literals, called lambda expressions in Java). Since 2017, a new JDK version is released twice a year, with each release improving the language incrementally.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Basics">Basics</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Identifier">Identifier</h3></div>
<p>An <a href="Identifier#In_computer_languages" title="Identifier">identifier</a> is the name of an element in the <a href="Source_code" title="Source code">code</a>. There are certain standard <a href="Naming_conventions_(programming)" class="mw-redirect" title="Naming conventions (programming)">naming conventions</a> to follow when selecting names for elements. Identifiers in Java are <a href="Case_sensitivity" title="Case sensitivity">case-sensitive</a>.
</p><p>An identifier can contain:
</p>
<ul><li>Any Unicode character that is a letter (including numeric letters like <a href="Roman_numerals" title="Roman numerals">Roman numerals</a>) or digit.</li>
<li><a href="Currency_sign" class="mw-redirect" title="Currency sign">Currency sign</a> (such as ¥).</li>
<li>Connecting punctuation character (such as <a href="Underscore" title="Underscore">_</a>).</li></ul>
<p>An identifier cannot:
</p>
<ul><li>Start with a digit.</li>
<li>Be equal to a reserved keyword, null literal or <a href="Boolean_data_type" title="Boolean data type">Boolean</a> literal.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Keywords">Keywords</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="List_of_Java_keywords" title="List of Java keywords">List of Java keywords</a></div>
<div class="mw-heading mw-heading4"><h4 id="Keywords_2">Keywords</h4></div>
<p>The following words are keywords and cannot be used as identifiers under any circumstances.
</p>
<style data-mw-deduplicate="TemplateStyles:r1184024115">
/* start https://en.wikipedia.org/ */


.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}


/* end https://en.wikipedia.org/ */
</style><div class="div-col" style="column-width: 15em;">
<ul><li><code>_</code></li>
<li><code>abstract</code></li>
<li><code>assert</code></li>
<li><code>boolean</code></li>
<li><code>break</code></li>
<li><code>byte</code></li>
<li><code>case</code></li>
<li><code>catch</code></li>
<li><code>char</code></li>
<li><code>class</code></li>
<li><code>continue</code></li>
<li><code>default</code></li>
<li><code>do</code></li>
<li><code>double</code></li>
<li><code>else</code></li>
<li><code>enum</code></li>
<li><code>extends</code></li>
<li><code>final</code></li>
<li><code>finally</code></li>
<li><code>float</code></li>
<li><code>for</code></li>
<li><code>if</code></li>
<li><code>implements</code></li>
<li><code>import</code></li>
<li><code>instanceof</code></li>
<li><code>int</code></li>
<li><code>interface</code></li>
<li><code>long</code></li>
<li><code>native</code></li>
<li><code>new</code></li>
<li><code>package</code></li>
<li><code>private</code></li>
<li><code>protected</code></li>
<li><code>public</code></li>
<li><code>return</code></li>
<li><code>short</code></li>
<li><code>static</code></li>
<li><code>super</code></li>
<li><code>switch</code></li>
<li><code>synchronized</code></li>
<li><code>this</code></li>
<li><code>throw</code></li>
<li><code>throws</code></li>
<li><code>transient</code></li>
<li><code>try</code></li>
<li><code>void</code></li>
<li><code>volatile</code></li>
<li><code>while</code></li></ul>
</div>
<div class="mw-heading mw-heading4"><h4 id="Reserved_identifiers">Reserved identifiers</h4></div>
<p>The following words are contextual keywords and are only restricted in certain contexts.
</p>
<div class="div-col" style="column-width: 15em;">
<ul><li><code>exports</code></li>
<li><code>module</code></li>
<li><code>non-sealed</code></li>
<li><code>open</code></li>
<li><code>opens</code></li>
<li><code>permits</code></li>
<li><code>provides</code></li>
<li><code>record</code></li>
<li><code>requires</code></li>
<li><code>sealed</code></li>
<li><code>to</code></li>
<li><code>transitive</code></li>
<li><code>var</code></li>
<li><code>when</code></li>
<li><code>with</code></li>
<li><code>yield</code></li></ul>
</div>
<div class="mw-heading mw-heading4"><h4 id="Reserved_words_for_literal_values">Reserved words for literal values</h4></div>
<p>The following words refer to literal values used by the language.
</p>
<div class="div-col" style="column-width: 15em;">
<ul><li><code>true</code></li>
<li><code>false</code></li>
<li><code>null</code></li></ul>
</div>
<div class="mw-heading mw-heading4"><h4 id="Unused">Unused</h4></div>
<p>The following words are reserved as keywords, but currently have no use or purpose.
</p>
<div class="div-col" style="column-width: 15em;">
<ul><li><code>const</code></li>
<li><code>goto</code></li>
<li><code>strictfp</code></li></ul>
</div>
<div class="mw-heading mw-heading3"><h3 id="Literals">Literals</h3></div>
<table class="wikitable">

<tbody><tr>
<th colspan="2">Integers
</th></tr>
<tr>
<th><a href="Binary_numeral_system" class="mw-redirect" title="Binary numeral system">binary</a> (introduced in Java SE 7)
</th>
<td><style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */


.mw-parser-output .monospaced{font-family:monospace,monospace}


/* end https://en.wikipedia.org/ */
</style><span class="monospaced">0b11110101</span> (<span class="monospaced">0b</span> followed by a binary number)
</td></tr>
<tr>
<th><a href="Octal" title="Octal">octal</a>
</th>
<td><span class="monospaced">0365</span> (<span class="monospaced">0</span> followed by an octal number)
</td></tr>
<tr>
<th><a href="Hexadecimal" title="Hexadecimal">hexadecimal</a>
</th>
<td><span class="monospaced">0xF5</span> (<span class="monospaced">0x</span> followed by a hexadecimal number)
</td></tr>
<tr>
<th><a href="Decimal" title="Decimal">decimal</a>
</th>
<td><span class="monospaced">245</span> (decimal number)
</td></tr>
<tr>
<th colspan="2"><a href="Floating-point" class="mw-redirect" title="Floating-point">Floating-point</a> values
</th></tr>
<tr>
<th rowspan="2">float
</th>
<td><span class="monospaced">23.5F</span>, <span class="monospaced">.5f</span>, <span class="monospaced">1.72E3F</span> (decimal fraction with an optional exponent indicator, followed by <span class="monospaced">F</span>)
</td></tr>
<tr>
<td><span class="monospaced">0x.5FP0F</span>, <span class="monospaced">0x.5P-6f</span> (<span class="monospaced">0x</span> followed by a hexadecimal fraction with a mandatory exponent indicator and a suffix <span class="monospaced">F</span>)
</td></tr>
<tr>
<th rowspan="2">double
</th>
<td><span class="monospaced">23.5D</span>, <span class="monospaced">.5</span>, <span class="monospaced">5.</span>, <span class="monospaced">1.72E3D</span> (decimal fraction with an optional exponent indicator, followed by optional <span class="monospaced">D</span>)
</td></tr>
<tr>
<td><span class="monospaced">0x.5FP0</span>, <span class="monospaced">0x.5P-6D</span> (<span class="monospaced">0x</span> followed by a hexadecimal fraction with a mandatory exponent indicator and an optional suffix <span class="monospaced">D</span>)
</td></tr>
<tr>
<th colspan="2">Character literals
</th></tr>
<tr>
<th>char
</th>
<td><span class="monospaced">'a'</span>, <span class="monospaced">'Z'</span>, <span class="monospaced">'\u0231'</span> (character or a character escape, enclosed in single quotes)
</td></tr>
<tr>
<th colspan="2">Boolean literals
</th></tr>
<tr>
<th>boolean
</th>
<td><span class="monospaced">true</span>, <span class="monospaced">false</span>
</td></tr>
<tr>
<th colspan="2">null literal
</th></tr>
<tr>
<th>null reference
</th>
<td><span class="monospaced">null</span>
</td></tr>
<tr>
<th colspan="2">String literals
</th></tr>
<tr>
<th>String
</th>
<td><span class="monospaced">"Hello, World"</span> (sequence of characters and character escapes enclosed in double quotes)
</td></tr>
<tr>
<th colspan="2">Characters escapes in strings
</th></tr>
<tr>
<th><a href="Unicode" title="Unicode">Unicode</a> character
</th>
<td><span class="monospaced">\u3876</span> (<span class="monospaced">\u</span> followed by the hexadecimal unicode code point up to U+FFFF)
</td></tr>
<tr>
<th><a href="Octal" title="Octal">Octal</a> escape
</th>
<td><span class="monospaced">\352</span> (octal number not exceeding 377, preceded by backslash)
</td></tr>
<tr>
<th><a href="Line_feed" class="mw-redirect" title="Line feed">Line feed</a>
</th>
<td><span class="monospaced">\n</span>
</td></tr>
<tr>
<th><a href="Carriage_return" title="Carriage return">Carriage return</a>
</th>
<td><span class="monospaced">\r</span>
</td></tr>
<tr>
<th><a href="Form_feed" class="mw-redirect" title="Form feed">Form feed</a>
</th>
<td><span class="monospaced">\f</span>
</td></tr>
<tr>
<th><a href="Backslash" title="Backslash">Backslash</a>
</th>
<td><span class="monospaced">\\</span>
</td></tr>
<tr>
<th><a href="Single_quote" class="mw-redirect" title="Single quote">Single quote</a>
</th>
<td><span class="monospaced">\'</span>
</td></tr>
<tr>
<th><a href="Double_quote" class="mw-redirect" title="Double quote">Double quote</a>
</th>
<td><span class="monospaced">\"</span>
</td></tr>
<tr>
<th><a href="Tab_character" class="mw-redirect" title="Tab character">Tab</a>
</th>
<td><span class="monospaced">\t</span>
</td></tr>
<tr>
<th><a href="Backspace" title="Backspace">Backspace</a>
</th>
<td><span class="monospaced">\b</span>
</td></tr></tbody></table>
<p>Integer literals are of <code>int</code> type by default unless <code>long</code> type is specified by appending <code>L</code> or <code>l</code> suffix to the literal, e.g. <code>367L</code>. Since Java SE 7, it is possible to include underscores between the digits of a number to increase readability; for example, a number <span class="monospaced">145608987</span> can be written as <span class="monospaced">145_608_987</span>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Variables">Variables</h3></div>
<p><a href="Variable_(computer_science)" title="Variable (computer science)">Variables</a> are identifiers associated with values. They are declared by writing the variable's type and name, and are optionally initialized in the same statement by assigning a value.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring an uninitialized variable called 'count', of type 'int'</span>
<span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">35</span><span class="p">;</span><span class="w"> </span><span class="c1">//Initializing the variable</span>
<span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">35</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring and initializing the variable at the same time</span>
</pre></div>
<p>Multiple variables of the same type can be declared and initialized in one statement using comma as a delimiter.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring multiple variables of the same type</span>
<span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring and initializing multiple variables of the same type</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Type_inference">Type inference</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Type_inference" title="Type inference">Type inference</a></div>
<p>Since Java 10, it has become possible to <a href="Type_inference" title="Type inference">infer types</a> for the variables automatically by using <code>var</code>.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// stream will have the FileOutputStream type as inferred from its initializer</span>
<span class="kd">var</span><span class="w"> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileOutputStream</span><span class="p">(</span><span class="s">"file.txt"</span><span class="p">);</span>

<span class="c1">// An equivalent declaration with an explicit type</span>
<span class="n">FileOutputStream</span><span class="w"> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileOutputStream</span><span class="p">(</span><span class="s">"file.txt"</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Code_blocks">Code blocks</h3></div>
<p>The separators <span class="monospaced">{</span> and <span class="monospaced">}</span> signify a code block and a new scope. Class members and the body of a <a href="Method_(computer_programming)" title="Method (computer programming)">method</a> are examples of what can live inside these braces in various contexts.
</p><p>Inside of method bodies, braces may be used to create new scopes, as follows:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">;</span>

<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"> </span><span class="c1">// Illegal because the variable b is declared in an inner scope..</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Comments">Comments</h3></div>
<p>Java has three kinds of <a href="Comment_(computer_programming)" title="Comment (computer programming)">comments</a>: <i>traditional comments</i>, <i>end-of-line comments</i> and <i>documentation comments</i>.
</p><p>Traditional comments, also known as block comments, start with <code>/*</code> and end with <code>*/</code>, they may span across multiple lines. This type of comment was derived from C and C++.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* This is a multi-line comment.</span>
<span class="cm">It may occupy more than one line. */</span>
</pre></div>
<p>End-of-line comments start with <code>//</code> and extend to the end of the current line. This comment type is also present in C++ and in modern C.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// This is an end-of-line comment</span>
</pre></div>
<p>Documentation comments in the source files are processed by the <a href="Javadoc" title="Javadoc">Javadoc</a> tool to generate documentation. This type of comment is identical to traditional comments, except it starts with <code>/**</code> and follows conventions defined by the Javadoc tool. Technically, these comments are a special kind of traditional comment and they are not specifically defined in the language specification.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/**</span>
<span class="cm"> * This is a documentation comment.</span>
<span class="cm"> * </span>
<span class="cm"> * @author John Doe</span>
<span class="cm"> */</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Universal_types">Universal types</h3></div>
<p>Classes in the package java.lang are implicitly imported into every program, as long as no explicitly-imported types have the same names. Important ones include:
</p>
<div class="mw-heading mw-heading4"><h4 id="java.lang.Object">java.lang.Object</h4></div>
<p><code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">java.lang.Object</code> is Java's <a href="Top_type" class="mw-redirect" title="Top type">top type</a>. It is implicitly the superclass of all classes that do not declare any parent class (thus all classes in Java inherent from <code>Object</code>. All values can be converted to this type, although for primitive values this involves <a href="Object_type_(object-oriented_programming)" class="mw-redirect" title="Object type (object-oriented programming)">autoboxing</a>.
</p>
<div class="mw-heading mw-heading4"><h4 id="java.lang.String">java.lang.String</h4></div>
<p><code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">java.lang.String</code> is Java's basic string type. <a href="Immutable_object" title="Immutable object">Immutable</a>. Some methods treat each <a href="UTF-16" title="UTF-16">UTF-16</a> code unit as a "character", but methods to convert to an <code>int[]</code> that is effectively <a href="UTF-32" title="UTF-32">UTF-32</a> are also available.
</p>
<div class="mw-heading mw-heading4"><h4 id="java.lang.Throwable">java.lang.Throwable</h4></div>
<p><code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">java.lang.Throwable</code> is supertype of everything that can be <a href="Exception_handling" title="Exception handling">thrown or caught</a> with Java's <code>throw</code> and <code>catch</code> statements.
</p>
<div class="mw-heading mw-heading2"><h2 id="Program_structure">Program structure</h2></div>
<p>Java applications consist of collections of classes. Classes exist in packages but can also be nested inside other classes.
</p>
<div class="mw-heading mw-heading3"><h3 id="main_method"><code>main</code> method</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Entry_point#Java" title="Entry point">Entry point §&nbsp;Java</a></div>
<p>Every Java application must have an entry point. This is true of both graphical interface applications and console applications. The entry point is the <code>main</code> method. There can be more than one class with a <code>main</code> method, but the main class is always defined externally (for example, in a <a href="Manifest_file" title="Manifest file">manifest file</a>). The <code>main</code> method along with the main class must be declared <code>public</code>. The method must be <code>static</code> and is passed command-line arguments as an array of strings. Unlike <a href="C%2B%2B" title="C++">C++</a> or <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, it never returns a value and must return <code>void</code>.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Packages">Packages</h3></div>
<p>Packages are a part of a class name and they are used to group and/or distinguish named entities from other ones. Another purpose of packages is to govern code access together with access modifiers. For example, <code>java.io.InputStream</code> is a fully qualified class name for the class <code>InputStream</code> which is located in the package <code>java.io</code>.
</p><p>A package is declared at the start of the file with the <code>package</code> declaration:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">myapplication.mylibrary</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyClass</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<p>Classes with the <code>public</code> modifier must be placed in the files with the same name and <span class="monospaced">java</span> extension and put into nested folders corresponding to the package name. The above class <code>myapplication.mylibrary.MyClass</code> will have the following path: <code>myapplication/mylibrary/MyClass.java</code>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Import_declaration">Import declaration</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Type_import_declaration">Type import declaration</h4></div>
<p>A type import declaration allows a named type to be referred to by a simple name rather than the full name that includes the package. Import declarations can be <i>single type import declarations</i> or <i>import-on-demand declarations</i>. Import declarations must be placed at the top of a code file after the package declaration.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">myPackage</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Random</span><span class="p">;</span><span class="w"> </span><span class="c1">// Single type declaration</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">ImportsTest</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* The following line is equivalent to</span>
<span class="cm"> * java.util.Random random = new java.util.Random();</span>
<span class="cm"> * It would have been incorrect without the import.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">Random</span><span class="w"> </span><span class="n">random</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Random</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Import-on-demand declarations are mentioned in the code. A "type import" imports all the types of the package. A "static import" imports members of the package.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">java.util.*</span><span class="p">;</span><span class="w"> </span><span class="cm">/*This form of importing classes makes all classes</span>
<span class="cm"> in package java.util available by name, could be used instead of the</span>
<span class="cm"> import declaration in the previous example. */</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.*</span><span class="p">;</span><span class="w"> </span><span class="cm">/*This statement is legal, but does nothing, since there</span>
<span class="cm"> are no classes directly in package java. All of them are in packages</span>
<span class="cm"> within package java. This does not import all available classes.*/</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Static_import_declaration">Static import declaration</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Static_import" title="Static import">Static import</a></div>
<p>This type of declaration has been available since <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. <a href="Static_imports" class="mw-redirect" title="Static imports">Static import</a> declarations allow access to static members defined in another class, interface, annotation, or enum; without specifying the class name:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import static</span><span class="w"> </span><span class="nn">java.lang.System.out</span><span class="p">;</span><span class="w"> </span><span class="c1">//'out' is a static field in java.lang.System</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HelloWorld</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* The following line is equivalent to</span>
<span class="cm"> System.out.println("Hi World!");</span>
<span class="cm"> and would have been incorrect without the import declaration. */</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Import-on-demand declarations allow to import all the fields of the type:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import static</span><span class="w"> </span><span class="nn">java.lang.System.*</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* This form of declaration makes all</span>
<span class="cm"> fields in the java.lang.System class available by name, and may be used instead</span>
<span class="cm"> of the import declaration in the previous example. */</span>
</pre></div>
<p>Enum constants may also be used with static import. For example, this enum is in the package called <code>screen</code>:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">ColorName</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RED</span><span class="p">,</span><span class="w"> </span><span class="n">BLUE</span><span class="p">,</span><span class="w"> </span><span class="n">GREEN</span>
<span class="p">};</span>
</pre></div>
<p>It is possible to use static import declarations in another class to retrieve the enum constants:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">screen.ColorName</span><span class="p">;</span>
<span class="kn">import static</span><span class="w"> </span><span class="nn">screen.ColorName.*</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Dots</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* The following line is equivalent to 'ColorName foo = ColorName.RED',</span>
<span class="cm"> and it would have been incorrect without the static import. */</span>
<span class="w"> </span><span class="n">ColorName</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RED</span><span class="p">;</span>

<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">shift</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* The following line is equivalent to</span>
<span class="cm"> if (foo == ColorName.RED) foo = ColorName.BLUE; */</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">foo</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">RED</span><span class="p">)</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">BLUE</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Operators">Operators</h2></div>
<p>Operators in Java are similar to those in <a href="C%2B%2B" title="C++">C++</a>. However, there is no <code>delete</code> operator due to <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a> mechanisms in Java, and there are no operations on <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">pointers</a> since Java does not support them. Another difference is that Java has an unsigned right shift operator (<code>&gt;&gt;&gt;</code>), while C's right shift operator's signedness is type-dependent. Operators in Java cannot be <a href="Operator_overloading" title="Operator overloading">overloaded</a>.
</p>
<table class="wikitable">

<tbody><tr>
<th style="text-align: center">Precedence
</th>
<th style="text-align: center">Operator
</th>
<th style="text-align: center">Description
</th>
<th style="text-align: center">Associativity
</th></tr>
<tr>
<th rowspan="3">1
</th>
<td style="border-bottom-style: none; border-top-style: none"><code>()</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Method invocation
</td>
<td style="vertical-align: center" rowspan="4">Left-to-right
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>[]</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Array access
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>.</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Class member selection
</td></tr>
<tr>
<th>2
</th>
<td style="border-bottom-style: none"><code>++</code> <code>--</code>
</td>
<td style="border-bottom-style: none">Postfix increment and decrement<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<th rowspan="5">3
</th>
<td style="border-bottom-style: none"><code>++</code> <code>--</code>
</td>
<td style="border-bottom-style: none">Prefix increment and decrement
</td>
<td style="vertical-align: center" rowspan="5">Right-to-left
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>+</code> <code>-</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Unary plus and minus
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>!</code> <code>~</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Logical NOT and bitwise NOT
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>(<i>type</i>) val</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Type cast
</td></tr>
<tr>
<td style="border-top-style: none"><code>new</code>
</td>
<td style="border-top-style: none">Class instance or array creation
</td></tr>
<tr>
<th>4
</th>
<td><code>*</code> <code>/</code> <code>%</code>
</td>
<td>Multiplication, division, and modulus (remainder)
</td>
<td style="vertical-align: center" rowspan="13">Left-to-right
</td></tr>
<tr>
<th rowspan="2">5
</th>
<td style="border-bottom-style: none;"><code>+</code> <code>-</code>
</td>
<td style="border-bottom-style: none;">Addition and subtraction
</td></tr>
<tr>
<td style="border-top-style: none"><code>+</code>
</td>
<td style="border-top-style: none">String concatenation
</td></tr>
<tr>
<th>6
</th>
<td><code>&lt;&lt;</code> <code>&gt;&gt;</code> <code>&gt;&gt;&gt;</code>
</td>
<td><a href="Bitwise_operation" title="Bitwise operation">Bitwise</a> left shift, signed right shift and unsigned right shift
</td></tr>
<tr>
<th rowspan="3">7
</th>
<td style="border-bottom-style: none;"><code>&lt;</code> <code>&lt;=</code>
</td>
<td style="border-bottom-style: none;"><a href="Relational_operator" title="Relational operator">Relational</a> "less than" and "less than or equal to"
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>&gt;</code> <code>&gt;=</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Relational "greater than" and "greater than or equal to"
</td></tr>
<tr>
<td style="border-top-style: none"><code>instanceof</code>
</td>
<td style="border-top-style: none">Type comparison
</td></tr>
<tr>
<th>8
</th>
<td><code>==</code> <code>!=</code>
</td>
<td>Relational "equal to" and "not equal to"
</td></tr>
<tr>
<th>9
</th>
<td><code>&amp;</code>
</td>
<td>Bitwise and logical AND
</td></tr>
<tr>
<th>10
</th>
<td><code>^</code>
</td>
<td>Bitwise and logical XOR (exclusive or)
</td></tr>
<tr>
<th>11
</th>
<td><code>|</code>
</td>
<td>Bitwise and logical OR (inclusive or)
</td></tr>
<tr>
<th>12
</th>
<td><code>&amp;&amp;</code>
</td>
<td>Logical conditional-AND
</td></tr>
<tr>
<th>13
</th>
<td><code>||</code>
</td>
<td>Logical conditional-OR
</td></tr>
<tr>
<th>14
</th>
<td><code><i>c</i>&nbsp;? <i>t</i>&nbsp;: <i>f</i></code>
</td>
<td><a href="Ternary_operator" class="mw-redirect" title="Ternary operator">Ternary</a> conditional (see <a href="%3F%3A" class="mw-redirect" title="?:">?:</a>)
</td>
<td style="vertical-align: center" rowspan="6">Right-to-left
</td></tr>
<tr>
<th rowspan="5">15
</th>
<td style="border-bottom-style: none"><code>=</code>
</td>
<td style="border-bottom-style: none">Simple assignment
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>+=</code> <code>-=</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Assignment by sum and difference
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>*=</code> <code>/=</code> <code>%=</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Assignment by product, quotient, and remainder
</td></tr>
<tr>
<td style="border-bottom-style: none; border-top-style: none"><code>&lt;&lt;=</code> <code>&gt;&gt;=</code> <code>&gt;&gt;&gt;=</code>
</td>
<td style="border-bottom-style: none; border-top-style: none">Assignment by bitwise left shift, signed right shift and unsigned right shift
</td></tr>
<tr>
<td style="border-top-style: none"><code>&amp;=</code> <code>^=</code> <code>|=</code>
</td>
<td style="border-top-style: none">Assignment by bitwise AND, XOR, and OR
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Control_structures">Control structures</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Conditional_statements">Conditional statements</h3></div>
<div class="mw-heading mw-heading4"><h4 id="if_statement"><code>if</code> statement</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Conditional_(computer_programming)#C-like_languages" title="Conditional (computer programming)">Conditional (computer programming) §&nbsp;C-like languages</a></div>
<p><a href="Conditional_(computer_programming)" title="Conditional (computer programming)">if statements</a> in Java are similar to those in C and use the same syntax:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p><code>if</code> statement may include optional <code>else</code> block, in which case it becomes an if-then-else statement:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomethingElse</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>Like C, else-if construction does not involve any special keywords, it is formed as a sequence of separate if-then-else statements:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomethingElse</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomethingDifferent</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>Also, a <a href="%3F%3A" class="mw-redirect" title="?:">?:</a> operator can be used in place of simple if statement, for example
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">minVal</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="switch_statement"><code>switch</code> statement</h4></div>
<p><a href="Switch_statement" title="Switch statement">Switch statements</a> in Java can use <code>byte</code>, <code>short</code>, <code>char</code>, and <code>int</code> (not <code>long</code>) primitive data types or their corresponding wrapper types. Starting with J2SE 5.0, it is possible to use <a href="Enumerated_type" title="Enumerated type">enum types</a>. Starting with Java SE 7, it is possible to use Strings.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Other <a href="Reference_type" class="mw-redirect" title="Reference type">reference types</a> cannot be used in <code>switch</code> statements.
</p><p>Possible values are listed using <code>case</code> labels. These labels in Java may contain only constants (including enum constants and string constants). Execution will start after the label corresponding to the expression inside the brackets. An optional <code>default</code> label may be present to declare that the code following it will be executed if none of the case labels correspond to the expression.
</p><p>Code for each label ends with the <code>break</code> keyword. It is possible to omit it causing the execution to proceed to the next label, however, a warning will usually be reported during compilation.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'A'</span><span class="p">:</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span><span class="w"> </span><span class="c1">// Triggered if ch == 'A'</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'B'</span><span class="p">:</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'C'</span><span class="p">:</span>
<span class="w"> </span><span class="n">doSomethingElse</span><span class="p">();</span><span class="w"> </span><span class="c1">// Triggered if ch == 'B' or ch == 'C'</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="p">:</span>
<span class="w"> </span><span class="n">doSomethingDifferent</span><span class="p">();</span><span class="w"> </span><span class="c1">// Triggered in any other case</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="switch_expressions"><code>switch</code> expressions</h5></div>
<p>Since Java 14 it has become possible to use switch expressions, which use the new arrow syntax:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'A'</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">Result</span><span class="p">.</span><span class="na">GREAT</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'B'</span><span class="p">,</span><span class="w"> </span><span class="sc">'C'</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">Result</span><span class="p">.</span><span class="na">FINE</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ThisIsNoGoodException</span><span class="p">();</span>
<span class="p">};</span>
</pre></div>
<p>Alternatively, there is a possibility to express the same with the <code>yield</code> statement, although it is recommended to prefer the arrow syntax because it avoids the problem of accidental fall throughs.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'A'</span><span class="p">:</span>
<span class="w"> </span><span class="kd">yield</span><span class="w"> </span><span class="n">Result</span><span class="p">.</span><span class="na">GREAT</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'B'</span><span class="p">:</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="sc">'C'</span><span class="p">:</span>
<span class="w"> </span><span class="kd">yield</span><span class="w"> </span><span class="n">Result</span><span class="p">.</span><span class="na">FINE</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="p">:</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ThisIsNoGoodException</span><span class="p">();</span>
<span class="p">};</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Iteration_statements">Iteration statements</h3></div><p>
Iteration statements are statements that are repeatedly executed when a given condition is evaluated as true. Since <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>, Java has four forms of such statements. The condition must have type boolean or Boolean, meaning C's</p><div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div><p>results in a compilation error.
</p><div class="mw-heading mw-heading4"><h4 id="while_loop"><code>while</code> loop</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="While_loop" title="While loop">While loop</a></div>
<p>In the <code>while</code> loop, the test is done before each iteration.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="do_..._while_loop"><code>do ... while</code> loop</h4></div>
<p>In the <code>do ... while</code> loop, the test is done after each iteration. Consequently, the code is always executed at least once.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// doSomething() is called at least once</span>
<span class="k">do</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="for_loop"><code>for</code> loop</h4></div>
<p><code>for</code> loops in Java include an initializer, a condition and a counter expression. It is possible to include several expressions of the same kind using comma as delimiter (except in the condition). However, unlike C, the comma is just a delimiter and not an operator.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
<span class="w"> </span>
<span class="c1">// A more complex loop using two variables</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>Like C, all three expressions are optional. The following loop is infinite:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">for</span><span class="w"> </span><span class="p">(;;)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Enhanced_for_loop">Enhanced <code>for</code> loop</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Enhanced_for_loop" class="mw-redirect" title="Enhanced for loop">Enhanced for loop</a></div>
<p><a href="Enhanced_for_loop" class="mw-redirect" title="Enhanced for loop">Enhanced <code>for</code> loops</a> have been available since <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. This type of loop uses built-in iterators over arrays and collections to return each item in the given collection. Every element is returned and reachable in the context of the code block. When the block is executed, the next item is returned until there are no items remaining. Unlike <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, this kind of loop does not involve a special keyword, but instead uses a different notation style.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">intArray</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Jump_statements">Jump statements</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Labels">Labels</h4></div>
<p>Labels are given points in code used by <code>break</code> and <code>continue</code> statements. The Java <code>goto</code> keyword cannot be used to jump to specific points in code.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nl">start</span><span class="p">:</span>
<span class="n">someMethod</span><span class="p">();</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="break_statement"><code>break</code> statement</h4></div>
<p>The <code>break</code> statement breaks out of the closest loop or <code>switch</code> statement. Execution continues in the statement after the terminated statement, if any.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// Will break to this point</span>
<span class="p">}</span>
</pre></div>
<p>It is possible to break out of the outer loop using labels:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nl">outer</span><span class="p">:</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">break</span><span class="w"> </span><span class="n">outer</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="c1">// Will break to this point</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="continue_statement"><code>continue</code> statement</h4></div>
<p>The <code>continue</code> statement discontinues the current iteration of the current control statement and begins the next iteration. The following <code>while</code> loop in the code below reads characters by calling <code>getChar()</code>, skipping the statements in the body of the loop if the characters are spaces:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">ch</span><span class="p">;</span>
<span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">getChar</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">' '</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"> </span><span class="c1">// Skips the rest of the while-loop</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="c1">// Rest of the while-loop, will not be reached if ch == ' '</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>Labels can be specified in <code>continue</code> statements and <code>break</code> statements:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nl">outer</span><span class="p">:</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">str</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">stringsArr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">char</span><span class="o">[]</span><span class="w"> </span><span class="n">strChars</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">str</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">strChars</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ch</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">' '</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* Continues the outer cycle and the next</span>
<span class="cm"> string is retrieved from stringsArr */</span>
<span class="w"> </span><span class="k">continue</span><span class="w"> </span><span class="n">outer</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">doSomething</span><span class="p">(</span><span class="n">ch</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="return_statement"><code>return</code> statement</h4></div>
<p>The <code>return</code> statement is used to end method execution and to return a value. A value returned by the method is written after the <code>return</code> keyword. If the method returns anything but <code>void</code>, it must use the <code>return</code> statement to return some value.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">(</span><span class="kt">boolean</span><span class="w"> </span><span class="n">streamClosed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// If streamClosed is true, execution is stopped</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">streamClosed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">readFromStream</span><span class="p">();</span>
<span class="p">}</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">calculateSum</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p><code>return</code> statement ends execution immediately, except for one case: if the statement is encountered within a <code>try</code> block and it is complemented by a <code>finally</code>, control is passed to the <code>finally</code> block.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">(</span><span class="kt">boolean</span><span class="w"> </span><span class="n">streamClosed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">streamClosed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">readFromStream</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/* Will be called last even if </span>
<span class="cm"> readFromStream() was not called */</span>
<span class="w"> </span><span class="n">freeResources</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Exception_handling_statements">Exception handling statements</h3></div>
<div class="mw-heading mw-heading4"><h4 id="try-catch-finally_statements"><code>try-catch-finally</code> statements</h4></div>
<p>Exceptions are managed within <code>try</code> ... <code>catch</code> blocks.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Statements that may throw exceptions</span>
<span class="w"> </span><span class="n">methodThrowingExceptions</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">ex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Exception caught and handled here</span>
<span class="w"> </span><span class="n">reportException</span><span class="p">(</span><span class="n">ex</span><span class="p">);</span>
<span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Statements always executed after the try/catch blocks</span>
<span class="w"> </span><span class="n">freeResources</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>The statements within the <code>try</code> block are executed, and if any of them throws an exception, execution of the block is discontinued and the exception is handled by the <code>catch</code> block. There may be multiple <code>catch</code> blocks, in which case the first block with an exception variable whose type matches the type of the thrown exception is executed.
</p><p>Java SE 7 also introduced multi-catch clauses besides uni-catch clauses. This type of catch clauses allows Java to handle different types of exceptions in a single block provided they are not subclasses of each other.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">methodThrowingExceptions</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">IOException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">IllegalArgumentException</span><span class="w"> </span><span class="n">ex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">//Both IOException and IllegalArgumentException will be caught and handled here</span>
<span class="w"> </span><span class="n">reportException</span><span class="p">(</span><span class="n">ex</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>If no <code>catch</code> block matches the type of the thrown exception, the execution of the outer block (or method) containing the <code>try</code> ... <code>catch</code> statement is discontinued, and the exception is passed up and outside the containing block (or method). The exception is propagated upwards through the <a href="Call_stack" title="Call stack">call stack</a> until a matching <code>catch</code> block is found within one of the currently active methods. If the exception propagates all the way up to the top-most <code>main</code> method without a matching <code>catch</code> block being found, a textual description of the exception is written to the standard output stream.
</p><p>The statements within the <code>finally</code> block are always executed after the <code>try</code> and <code>catch</code> blocks, whether or not an exception was thrown and even if a <code>return</code> statement was reached. Such blocks are useful for providing cleanup code that is guaranteed to always be executed.
</p><p>The <code>catch</code> and <code>finally</code> blocks are optional, but at least one or the other must be present following the <code>try</code> block.
</p>
<div class="mw-heading mw-heading4"><h4 id="try-with-resources_statements"><code>try</code>-with-resources statements</h4></div>
<p><code>try</code>-with-resources statements are a special type of <code>try-catch-finally</code> statements introduced as an implementation of the <a href="Dispose_pattern" title="Dispose pattern">dispose pattern</a> in Java SE 7. In a <code>try</code>-with-resources statement the <code>try</code> keyword is followed by initialization of one or more resources that are released automatically when the <code>try</code> block execution is finished. Resources must implement <code>java.lang.AutoCloseable</code>. <code>try</code>-with-resources statements are not required to have a <code>catch</code> or <code>finally</code> block unlike normal <code>try-catch-finally</code> statements.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">FileOutputStream</span><span class="w"> </span><span class="n">fos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileOutputStream</span><span class="p">(</span><span class="s">"filename"</span><span class="p">);</span>
<span class="w"> </span><span class="n">XMLEncoder</span><span class="w"> </span><span class="n">xEnc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">XMLEncoder</span><span class="p">(</span><span class="n">fos</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">xEnc</span><span class="p">.</span><span class="na">writeObject</span><span class="p">(</span><span class="n">object</span><span class="p">);</span>
<span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">IOException</span><span class="w"> </span><span class="n">ex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Logger</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">Serializer</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()).</span><span class="na">log</span><span class="p">(</span><span class="n">Level</span><span class="p">.</span><span class="na">SEVERE</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">ex</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Since Java 9 it is possible to use already declared variables:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">FileOutputStream</span><span class="w"> </span><span class="n">fos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileOutputStream</span><span class="p">(</span><span class="s">"filename"</span><span class="p">);</span>
<span class="n">XMLEncoder</span><span class="w"> </span><span class="n">xEnc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">XMLEncoder</span><span class="p">(</span><span class="n">fos</span><span class="p">);</span>
<span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">fos</span><span class="p">;</span><span class="w"> </span><span class="n">xEnc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">xEnc</span><span class="p">.</span><span class="na">writeObject</span><span class="p">(</span><span class="n">object</span><span class="p">);</span>
<span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">IOException</span><span class="w"> </span><span class="n">ex</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Logger</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">Serializer</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()).</span><span class="na">log</span><span class="p">(</span><span class="n">Level</span><span class="p">.</span><span class="na">SEVERE</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">ex</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="throw_statement"><code>throw</code> statement</h4></div>
<p>The <code>throw</code> statement is used to throw an exception and end the execution of the block or method. The thrown exception instance is written after the <code>throw</code> statement.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">methodThrowingExceptions</span><span class="p">(</span><span class="n">Object</span><span class="w"> </span><span class="n">obj</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">obj</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Throws exception of NullPointerException type</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullPointerException</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// Will not be called, if object is null</span>
<span class="w"> </span><span class="n">doSomethingWithObject</span><span class="p">(</span><span class="n">obj</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Thread_concurrency_control">Thread concurrency control</h3></div>
<p>Java has built-in tools for <a href="Thread_(computing)" title="Thread (computing)">multi-thread programming</a>. For the purposes of thread <a href="Synchronization_(computer_science)" title="Synchronization (computer science)">synchronization</a> the <code>synchronized</code> statement is included in Java language.
</p><p>To make a code block synchronized, it is preceded by the <code>synchronized</code> keyword followed by the lock object inside the brackets. When the executing thread reaches the synchronized block, it acquires a <a href="Mutual_exclusion" title="Mutual exclusion">mutual exclusion</a> lock, executes the block, then releases the lock. No threads may enter this block until the lock is released. Any non-null reference type may be used as the lock.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* Acquires lock on someObject. It must be of</span>
<span class="cm">a reference type and must be non-null */</span>
<span class="kd">synchronized</span><span class="w"> </span><span class="p">(</span><span class="n">someObject</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Synchronized statements</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="assert_statement"><code>assert</code> statement</h3></div>
<p><code>assert</code> statements have been available since <a href="J2SE_1.4" class="mw-redirect" title="J2SE 1.4">J2SE 1.4</a>. These types of statements are used to make <a href="Assertion_(computing)" class="mw-redirect" title="Assertion (computing)">assertions</a> in the source code, which can be turned on and off during execution for specific classes or packages. To declare an assertion the <code>assert</code> keyword is used followed by a conditional expression. If it evaluates to <code>false</code> when the statement is executed, an exception is thrown. This statement can include a colon followed by another expression, which will act as the exception's detail message.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// If n equals 0, AssertionError is thrown</span>
<span class="k">assert</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="cm">/* If n equals 0, AssertionError will be thrown</span>
<span class="cm">with the message after the colon */</span>
<span class="k">assert</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s">"n was equal to zero"</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Primitive_types">Primitive types</h2></div>
<p>Primitive types in Java include integer types, floating-point numbers, <a href="UTF-16" title="UTF-16">UTF-16</a> code units and a Boolean type. There are no unsigned types in Java except <code>char</code> type, which is used to represent UTF-16 code units. The lack of unsigned types is offset by introducing unsigned right shift operation (<code>&gt;&gt;&gt;</code>), which is not present in C++. Nevertheless, criticisms have been leveled about the lack of compatibility with C and C++ this causes.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">

<tbody><tr>
<th colspan="6">Primitive Types
</th></tr>
<tr>
<th>Type Name
</th>
<th><a href="Primitive_wrapper_class_in_Java" title="Primitive wrapper class in Java">Wrapper class</a>
</th>
<th>Value
</th>
<th>Range
</th>
<th>Size
</th>
<th>Default Value
</th></tr>
<tr>
<td><code>byte</code>
</td>
<td><code>java.lang.Byte</code>
</td>
<td>integer
</td>
<td>−128 through +127
</td>
<td>8-bit (1-byte)
</td>
<td><code>0</code>
</td></tr>
<tr>
<td><code>short</code>
</td>
<td><code>java.lang.Short</code>
</td>
<td>integer
</td>
<td>−32,768 through +32,767
</td>
<td>16-bit (2-byte)
</td>
<td><code>0</code>
</td></tr>
<tr>
<td><code>int</code>
</td>
<td><code>java.lang.Integer</code>
</td>
<td>integer
</td>
<td>−2,147,483,648 through +2,147,483,647
</td>
<td>32-bit (4-byte)
</td>
<td><code>0</code>
</td></tr>
<tr>
<td><code>long</code>
</td>
<td><code>java.lang.Long</code>
</td>
<td>integer
</td>
<td>−9,223,372,036,854,775,808 through<br> +9,223,372,036,854,775,807
</td>
<td>64-bit (8-byte)
</td>
<td><code>0</code>
</td></tr>
<tr>
<td><code>float</code>
</td>
<td><code>java.lang.Float</code>
</td>
<td>floating point number
</td>
<td>±1.401298E−45 through ±3.402823E+38
</td>
<td>32-bit (4-byte)
</td>
<td><code>0.0f</code><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td><code>double</code>
</td>
<td><code>java.lang.Double</code>
</td>
<td>floating point number
</td>
<td>±4.94065645841246E−324 through<br> ±1.79769313486232E+308
</td>
<td>64-bit (8-byte)
</td>
<td><code>0.0</code>
</td></tr>
<tr>
<td><code>boolean</code>
</td>
<td><code>java.lang.Boolean</code>
</td>
<td>Boolean
</td>
<td><code>true</code> or <code>false</code>
</td>
<td>1-bit (1-bit)
</td>
<td><code>false</code>
</td></tr>
<tr>
<td><code>char</code>
</td>
<td><code>java.lang.Character</code>
</td>
<td><a href="UTF-16" title="UTF-16">UTF-16</a> code unit (<a href="Mapping_of_Unicode_character_planes" class="mw-redirect" title="Mapping of Unicode character planes">BMP</a> character<br>or a part of a surrogate pair)
</td>
<td><code>'\u0000'</code> through <code>'\uFFFF'</code>
</td>
<td>16-bit (2-byte)
</td>
<td><code>'\u0000'</code>
</td></tr></tbody></table>
<p><code>char</code> does not necessarily correspond to a single character. It may represent a part of a <a href="UTF-16#Encoding_of_characters_outside_the_BMP" title="UTF-16">surrogate pair</a>, in which case Unicode code point is represented by a sequence of two <code>char</code> values.
</p>
<div class="mw-heading mw-heading3"><h3 id="Boxing_and_unboxing">Boxing and unboxing</h3></div>
<p>This language feature was introduced in <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. <i>Boxing</i> is the operation of converting a value of a primitive type into a value of a corresponding reference type, which serves as a wrapper for this particular primitive type. <i>Unboxing</i> is the reverse operation of converting a value of a reference type (previously boxed) into a value of a corresponding primitive type. Neither operation requires an explicit conversion.
</p><p>Example:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="p">;</span><span class="w"> </span><span class="c1">// Primitive type</span>
<span class="n">Integer</span><span class="w"> </span><span class="n">bar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">foo</span><span class="p">;</span><span class="w"> </span><span class="cm">/* foo is boxed to bar, bar is of Integer type,</span>
<span class="cm"> which serves as a wrapper for int */</span>
<span class="kt">int</span><span class="w"> </span><span class="n">foo2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bar</span><span class="p">;</span><span class="w"> </span><span class="c1">// Unboxed back to primitive type</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Reference_types">Reference types</h2></div>
<p>Reference types include class types, interface types, and array types. When the constructor is called, an object is created on the heap and a reference is assigned to the variable. When a variable of an object gets out of scope, the reference is broken and when there are no references left, the object gets marked as garbage. The garbage collector then collects and destroys it some time afterwards.
</p><p>A reference variable is <code>null</code> when it does not reference any object.
</p>
<div class="mw-heading mw-heading3"><h3 id="Arrays">Arrays</h3></div>
<p>Arrays in Java are created at runtime, just like class instances. Array length is defined at creation and cannot be changed.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">5</span><span class="o">]</span><span class="p">;</span>
<span class="n">numbers</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="n">numbers</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">numbers</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Initializers">Initializers</h4></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// Long syntax</span>
<span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span><span class="mi">20</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w"> </span><span class="mi">34</span><span class="p">};</span>
<span class="c1">// Short syntax</span>
<span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">numbers2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">20</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w"> </span><span class="mi">34</span><span class="p">};</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Multi-dimensional_arrays">Multi-dimensional arrays</h4></div>
<p>In Java, multi-dimensional arrays are represented as arrays of arrays. Technically, they are represented by arrays of references to other arrays.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="o">[][]</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span>
<span class="n">numbers</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>

<span class="kt">int</span><span class="o">[][]</span><span class="w"> </span><span class="n">numbers2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">}};</span>
</pre></div>
<p>Due to the nature of the multi-dimensional arrays, sub-arrays can vary in length, so multi-dimensional arrays are not bound to be rectangular unlike C:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="o">[][]</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">][]</span><span class="p">;</span><span class="w"> </span><span class="c1">//Initialization of the first dimension only</span>

<span class="n">numbers</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span>
<span class="n">numbers</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Classes">Classes</h3></div>
<p><a href="Class_(computer_programming)" title="Class (computer programming)">Classes</a> are fundamentals of an object-oriented language such as Java. They contain members that store and manipulate data. Classes are divided into <i>top-level</i> and <i>nested</i>. Nested classes are classes placed inside another class that may access the private members of the enclosing class. Nested classes include <i>member classes</i> (which may be defined with the <i>static</i> modifier for simple nesting or without it for inner classes), <i>local classes</i> and <i>anonymous classes</i>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Declaration">Declaration</h4></div>
<table class="wikitable">

<tbody><tr>
<th>Top-level class
</th>
<td><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Class members</span>
<span class="p">}</span>
</pre></div>
</td></tr>
<tr>
<th>Inner class
</th>
<td><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Top-level class</span>
<span class="w"> </span><span class="kd">class</span> <span class="nc">Bar</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Inner class</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr>
<tr>
<th>Nested class
</th>
<td><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Top-level class</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Bar</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Nested class</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr>
<tr>
<th>Local class
</th>
<td><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">bar</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">class</span> <span class="nc">Foobar</span><span class="w"> </span><span class="p">{</span><span class="c1">// Local class within a method</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr>
<tr>
<th>Anonymous class
</th>
<td><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">bar</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Object</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="c1">// Creation of a new anonymous class extending Object</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></tbody></table>
<div class="mw-heading mw-heading4"><h4 id="Instantiation">Instantiation</h4></div>
<p>Non-static members of a class define the types of the <a href="Instance_variable" title="Instance variable">instance variables</a> and methods, which are related to the objects created from that class. To create these objects, the class must be instantiated by using the <code>new</code> operator and calling the class constructor.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">Foo</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">();</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Accessing_members">Accessing members</h4></div>
<p>Members of both instances and static classes are accessed with the <code>.</code> (dot) operator.
</p><p><b>Accessing an instance member</b><br>
Instance members can be accessed through the name of a variable.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">String</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Hello"</span><span class="p">;</span>
<span class="n">String</span><span class="w"> </span><span class="n">bar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">foo</span><span class="p">.</span><span class="na">toUpperCase</span><span class="p">();</span>
</pre></div>
<p><b>Accessing a static class member</b><br>
Static members are accessed by using the name of the class or any other type. This does not require the creation of a class instance. Static members are declared using the <code>static</code> modifier.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">// Calling the static method</span>
<span class="n">Foo</span><span class="p">.</span><span class="na">doSomething</span><span class="p">();</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Modifiers">Modifiers</h4></div>
<p>Modifiers are keywords used to modify declarations of types and type members. Most notably there is a sub-group containing the access modifiers.
</p>
<ul><li><b><code>abstract</code></b> - Specifies that a class only serves as a base class and cannot be instantiated.</li>
<li><b><code>static</code></b> - Used only for member classes, specifies that the member class does not belong to a specific instance of the containing class.</li>
<li><b><code>final</code></b> - Classes marked as <code>final</code> cannot be extended from and cannot have any subclasses.</li>
<li><b><code>strictfp</code></b> - Specifies that all floating-point operations must be carried out conforming to <a href="IEEE_754" title="IEEE 754">IEEE 754</a> and forbids using enhanced precision to store intermediate results.</li></ul>
<div class="mw-heading mw-heading5"><h5 id="Abstract_class">Abstract class</h5></div>
<div class="excerpt-block"><style data-mw-deduplicate="TemplateStyles:r1066933788">
/* start https://en.wikipedia.org/ */


.mw-parser-output .excerpt-hat .mw-editsection-like{font-style:normal}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable dablink excerpt-hat selfref">This section is an excerpt from <a href="Abstract_type#Java" title="Abstract type">Abstract type § Java</a>.<span class="mw-editsection-like "><span class="mw-editsection-bracket">[</span><a class="external text external" href="https://en.wikipedia.org/w/index.php?title=Abstract_type&amp;action=edit#Java">edit</a><span class="mw-editsection-bracket">]</span></span></div><div class="excerpt">
<p>By default, all methods in all classes are concrete, unless the abstract keyword is used. An abstract class may include abstract methods, which have no implementation.
By default, all methods in all interfaces are abstract, unless the default keyword is used.
The default keyword can be used to specify a concrete method in an interface.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">//By default, all methods in all classes are concrete, unless the abstract keyword is used.</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Demo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// An abstract class may include abstract methods, which have no implementation.</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">);</span>

<span class="w"> </span><span class="c1">// An abstract class may also include concrete methods.</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">product</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="o">*</span><span class="n">y</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">//By default, all methods in all interfaces are abstract, unless the default keyword is used.</span>
<span class="kd">interface</span> <span class="nc">DemoInterface</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getLength</span><span class="p">();</span><span class="w"> </span><span class="c1">//The abstract keyword can be used here, though is completely useless</span>
<span class="w"> </span>
<span class="w"> </span><span class="c1">//The default keyword can be used in this context to specify a concrete method in an interface</span>
<span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">product</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">y</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<span class="mw-default-size" typeof="mw:File"></span></div></div>
<div class="mw-heading mw-heading5"><h5 id="Final_class">Final class</h5></div>
<div class="excerpt-block"><div role="note" class="hatnote navigation-not-searchable dablink excerpt-hat selfref">This section is an excerpt from <a href="Final_(Java)#Final_classes" title="Final (Java)">Final (Java) § Final classes</a>.<span class="mw-editsection-like "><span class="mw-editsection-bracket">[</span><a class="external text external" href="https://en.wikipedia.org/w/index.php?title=Final_(Java)&amp;action=edit#Final_classes">edit</a><span class="mw-editsection-bracket">]</span></span></div><div class="excerpt">
<p>A final <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> cannot be subclassed. As doing this can confer security and efficiency benefits, many of the Java standard library classes are final, such as <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/lang/System.html">java.lang.System</a></code> and <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/lang/String.html">java.lang.String</a></code>.
</p><p>Example:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyFinalClass</span><span class="w"> </span><span class="p">{...}</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">ThisIsWrong</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">MyFinalClass</span><span class="w"> </span><span class="p">{...}</span><span class="w"> </span><span class="c1">// forbidden</span>
</pre></div></div></div>
<div class="mw-heading mw-heading5"><h5 id="Access_modifiers">Access modifiers</h5></div>
<p>The <i>access modifiers</i>, or <i>inheritance modifiers</i>, set the accessibility of classes, methods, and other members. Members marked as <code>public</code> can be reached from anywhere. If a class or its member does not have any modifiers, default access is assumed.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">go</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Bar</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>The following table shows whether code within a class has access to the class or method depending on the accessing class location and the modifier for the accessed class or class member:
</p>
<table class="wikitable" style="text-align: center;">
<tbody><tr>
<th width="20%">Modifier
</th>
<th width="20%">Same class or nested class
</th>
<th width="20%">Other class inside the same package
</th>
<th width="20%">Extended Class inside another package
</th>
<th width="20%">Non-extended inside another package
</th></tr>
<tr>
<th><code>private</code>
</th>
<td>yes
</td>
<td>no
</td>
<td>no
</td>
<td>no
</td></tr>
<tr>
<th>default (package private)
</th>
<td>yes
</td>
<td>yes
</td>
<td>no
</td>
<td>no
</td></tr>
<tr>
<th><code>protected</code>
</th>
<td>yes
</td>
<td>yes
</td>
<td>yes
</td>
<td>no
</td></tr>
<tr>
<th><code>public</code>
</th>
<td>yes
</td>
<td>yes
</td>
<td>yes
</td>
<td>yes
</td></tr>
</tbody></table>

<div class="mw-heading mw-heading4"><h4 id="Constructors_and_initializers">Constructors and initializers</h4></div>
<p>A <a href="Constructor_(object-oriented_programming)" title="Constructor (object-oriented programming)">constructor</a> is a special method called when an object is initialized. Its purpose is to initialize the members of the object. The main differences between constructors and ordinary methods are that constructors are called only when an instance of the class is created and never return anything. Constructors are declared as common methods, but they are named after the class and no return type is specified:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">str</span><span class="p">;</span>

<span class="w"> </span><span class="n">Foo</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Constructor with no arguments</span>

<span class="w"> </span><span class="c1">// Initialization</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="n">Foo</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">str</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Constructor with one argument</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">str</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Initializers are blocks of code that are executed when a class or an instance of a class is created. There are two kinds of initializers, <i>static initializers</i> and <i>instance initializers</i>.
</p><p>Static initializers initialize static fields when the class is created. They are declared using the <code>static</code> keyword:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Initialization</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>A class is created only once. Therefore, static initializers are not called more than once. On the contrary, instance initializers are automatically called before the call to a constructor every time an instance of the class is created. Unlike constructors instance initializers cannot take any arguments and generally they cannot throw any <a href="Exception_handling#Checked_exceptions" title="Exception handling">checked exceptions</a> (except in several special cases). Instance initializers are declared in a block without any keywords:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Initialization</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Since Java has a garbage collection mechanism, there are no <a href="Destructor_(computer_science)" class="mw-redirect" title="Destructor (computer science)">destructors</a>. However, every object has a <code>finalize()</code> method called prior to garbage collection, which can be <a href="Method_overriding" title="Method overriding">overridden</a> to implement finalization.
</p>
<div class="mw-heading mw-heading4"><h4 id="Methods">Methods</h4></div>
<p>All the statements in Java must reside within <a href="Method_(computer_programming)" title="Method (computer programming)">methods</a>. Methods are similar to functions except they belong to classes. A method has a return value, a name and usually some parameters initialized when it is called with some arguments. Similar to C++, methods returning nothing have return type declared as <code>void</code>. Unlike in C++, methods in Java are not allowed to have <a href="Default_argument" title="Default argument">default argument</a> values and methods are usually overloaded instead.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">bar</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="cm">/* Overloaded method with the same name but different set of arguments */</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">bar</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="o">*</span><span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>A method is called using <code>.</code> notation on an object, or in the case of a static method, also on the name of a class.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">Foo</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">();</span>
<span class="kt">int</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">foo</span><span class="p">.</span><span class="na">bar</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"> </span><span class="c1">// Non-static method is called on foo</span>

<span class="kt">int</span><span class="w"> </span><span class="n">finalResult</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Math</span><span class="p">.</span><span class="na">abs</span><span class="p">(</span><span class="n">result</span><span class="p">);</span><span class="w"> </span><span class="c1">// Static method call</span>
</pre></div>
<p>The <code>throws</code> keyword indicates that a method throws an exception. All checked exceptions must be listed in a comma-separated list.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">openStream</span><span class="p">()</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="p">,</span><span class="w"> </span><span class="n">myException</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Indicates that IOException may be thrown</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Modifiers_2">Modifiers</h5></div>
<ul><li><b><code>abstract</code></b> - <a href="Abstract_method" class="mw-redirect" title="Abstract method">Abstract methods</a> can be present only in <a href="Abstract_class" class="mw-redirect" title="Abstract class">abstract classes</a>, such methods have no body and must be overridden in a subclass unless it is abstract itself.</li>
<li><b><code>static</code></b> - Makes the method static and accessible without creation of a class instance. However static methods cannot access non-static members in the same class.</li>
<li><b><code>final</code></b> - Declares that the method cannot be overridden in a subclass.</li>
<li><b><code>native</code></b> - Indicates that this method is implemented through <a href="JNI" class="mw-redirect" title="JNI">JNI</a> in platform-dependent code. Actual implementation happens outside Java code, and such methods have no body.</li>
<li><b><code>strictfp</code></b> - Declares strict conformance to <a href="IEEE_754" title="IEEE 754">IEEE 754</a> in carrying out floating-point operations.</li>
<li><b><code>synchronized</code></b> - Declares that a thread executing this method must acquire monitor. For <code>synchronized</code> methods the monitor is the class instance or <code>java.lang.Class</code> if the method is static.</li>
<li>Access modifiers - Identical to those used with classes.</li></ul>
<div class="mw-heading mw-heading6"><h6 id="Final_methods">Final methods</h6></div>
<div class="excerpt-block"><div role="note" class="hatnote navigation-not-searchable dablink excerpt-hat selfref">This section is an excerpt from <a href="Final_(Java)#Final_methods" title="Final (Java)">Final (Java) § Final methods</a>.<span class="mw-editsection-like "><span class="mw-editsection-bracket">[</span><a class="external text external" href="https://en.wikipedia.org/w/index.php?title=Final_(Java)&amp;action=edit#Final_methods">edit</a><span class="mw-editsection-bracket">]</span></span></div><div class="excerpt">
<p>A final <a href="Method_(computer_science)" class="mw-redirect" title="Method (computer science)">method</a> cannot be <a href="Method_overriding" title="Method overriding">overridden</a> or hidden by subclasses.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> This is used to prevent unexpected behavior from a subclass altering a method that may be crucial to the function or consistency of the class.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>Example:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Base</span>
<span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m1</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m2</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m3</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m4</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span>
<span class="p">}</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Derived</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Base</span>
<span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m1</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span><span class="w"> </span><span class="c1">// OK, overriding Base#m1()</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m2</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span><span class="w"> </span><span class="c1">// forbidden</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m3</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span><span class="w"> </span><span class="c1">// OK, hiding Base#m3()</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">m4</span><span class="p">()</span><span class="w"> </span><span class="p">{...}</span><span class="w"> </span><span class="c1">// forbidden</span>
<span class="p">}</span>
</pre></div>
<p>A common misconception is that declaring a method as <code>final</code> improves efficiency by allowing the compiler to directly insert the method wherever it is called (see <a href="Inline_expansion" title="Inline expansion">inline expansion</a>). Because the method is loaded at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">runtime</a>, compilers are unable to do this. Only the runtime environment and <a href="Just-in-time_compilation" title="Just-in-time compilation">JIT</a> compiler know exactly which classes have been loaded, and so only they are able to make decisions about when to inline, whether or not the method is final.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
Machine code compilers that generate directly executable, platform-specific <a href="Machine_code" title="Machine code">machine code</a>, are an exception. When using <a href="Static_linking" class="mw-redirect" title="Static linking">static linking</a>, the compiler can safely assume that methods and variables computable at <a href="Compile-time" class="mw-redirect" title="Compile-time">compile-time</a> may be inlined.</div></div>
<div class="mw-heading mw-heading5"><h5 id="Varargs">Varargs</h5></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Variadic_function#In_Java" title="Variadic function">Variadic function §&nbsp;In Java</a></div>
<p>This language feature was introduced in <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. The last argument of the method may be declared as a variable arity parameter, in which case the method becomes a variable arity method (as opposed to fixed arity methods) or simply <a href="Variadic_function" title="Variadic function">varargs</a> method. This allows one to pass a variable number of values, of the declared type, to the method as parameters - including no parameters. These values will be available inside the method as an array.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">void</span><span class="w"> </span><span class="nf">printReport</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">header</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="p">...</span><span class="w"> </span><span class="n">numbers</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">//numbers represents varargs</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">header</span><span class="p">);</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">numbers</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">num</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">// Calling varargs method</span>
<span class="n">printReport</span><span class="p">(</span><span class="s">"Report data"</span><span class="p">,</span><span class="w"> </span><span class="mi">74</span><span class="p">,</span><span class="w"> </span><span class="mi">83</span><span class="p">,</span><span class="w"> </span><span class="mi">25</span><span class="p">,</span><span class="w"> </span><span class="mi">96</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Fields">Fields</h4></div>
<p>Fields, or <a href="Class_variable" title="Class variable">class variables</a>, can be declared inside the class body to store data.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">bar</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Fields can be initialized directly when declared.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">bar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">2.3</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Modifiers_3">Modifiers</h5></div>
<ul><li><b><code>static</code></b> - Makes the field a static member.</li>
<li><b><code>final</code></b> - Allows the field to be initialized only once in a constructor or inside initialization block or during its declaration, whichever is earlier.</li>
<li><b><code>transient</code></b> - Indicates that this field will not be stored during <a href="Serialization" title="Serialization">serialization</a>.</li>
<li><b><code>volatile</code></b> - If a field is declared <code>volatile</code>, it is ensured that all threads see a consistent value for the variable.</li></ul>
<div class="mw-heading mw-heading4"><h4 id="Inheritance">Inheritance</h4></div>
<p>Classes in Java can only <a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inherit</a> from <i>one</i> class. A class can be derived from any class that is not marked as <code>final</code>. Inheritance is declared using the <code>extends</code> keyword. A class can reference itself using the <code>this</code> keyword and its direct superclass using the <code>super</code> keyword.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>

<span class="p">}</span>

<span class="kd">class</span> <span class="nc">Foobar</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Foo</span><span class="w"> </span><span class="p">{</span>

<span class="p">}</span>
</pre></div>
<p>If a class does not specify its superclass, it implicitly inherits from <code>java.lang.Object</code> class. Thus all classes in Java are subclasses of <code>Object</code> class.
</p><p>If the superclass does not have a constructor without parameters the subclass must specify in its constructors what constructor of the superclass to use. For example:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Foo</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Do something with n</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="kd">class</span> <span class="nc">Foobar</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Foo</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// Superclass does not have constructor without parameters</span>
<span class="w"> </span><span class="c1">// so we have to specify what constructor of our superclass to use and how</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Foobar</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">(</span><span class="n">number</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">number</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Overriding_methods">Overriding methods</h5></div>
<p>Unlike C++, all non-<code>final</code> methods in Java are <a href="Virtual_function" title="Virtual function">virtual</a> and can be overridden by the inheriting classes.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Operation</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="kd">class</span> <span class="nc">NewOperation</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Operation</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">doSomething</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Abstract_classes">Abstract classes</h5></div>
<p>An <a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.1.1">Abstract Class</a> is a class that is incomplete, or is to be considered incomplete, so cannot be instantiated.
</p><p>A class C has abstract methods if any of the following is true:
</p>
<ul><li>C explicitly contains a declaration of an abstract method.</li>
<li>Any of C's superclasses has an abstract method and C neither declares nor inherits a method that implements it.</li>
<li>A direct superinterface of C declares or inherits a method (which is therefore necessarily abstract) and C neither declares nor inherits a method that implements it.</li>
<li>A subclass of an abstract class that is not itself abstract may be instantiated, resulting in the execution of a constructor for the abstract class and, therefore, the execution of the field initializers for instance variables of that class.</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">org.dwwwp.test</span><span class="p">;</span>

<span class="cm">/**</span>
<span class="cm"> * @author jcrypto</span>
<span class="cm"> */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">AbstractClass</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">hello</span><span class="p">;</span>

<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">AbstractClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": static block runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="n">hello</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"hello from "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">AbstractClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">AbstractClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": instance block runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">AbstractClass</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">AbstractClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": constructor runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">hello</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">hello</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">org.dwwwp.test</span><span class="p">;</span>

<span class="cm">/**</span>
<span class="cm"> * @author jcrypto</span>
<span class="cm"> */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">CustomClass</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">AbstractClass</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">CustomClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": static block runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">CustomClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": instance block runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">CustomClass</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">CustomClass</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">": constructor runtime"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">CustomClass</span><span class="w"> </span><span class="n">nc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CustomClass</span><span class="p">();</span>
<span class="w"> </span><span class="n">hello</span><span class="p">();</span>
<span class="w"> </span><span class="c1">//AbstractClass.hello();//also valid</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Output:
</p>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre>org.dwwwp.test.AbstractClass: static block runtime
org.dwwwp.test.CustomClass: static block runtime
org.dwwwp.test.AbstractClass: instance block runtime
org.dwwwp.test.AbstractClass: constructor runtime
org.dwwwp.test.CustomClass: instance block runtime
org.dwwwp.test.CustomClass: constructor runtime
hello from org.dwwwp.test.AbstractClass
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Enumerations">Enumerations</h4></div>
<p>This language feature was introduced in <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. Technically enumerations are a kind of class containing enum constants in its body. Each enum constant defines an instance of the enum type. Enumeration classes cannot be instantiated anywhere except in the enumeration class itself.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">enum</span><span class="w"> </span><span class="n">Season</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">WINTER</span><span class="p">,</span><span class="w"> </span><span class="n">SPRING</span><span class="p">,</span><span class="w"> </span><span class="n">SUMMER</span><span class="p">,</span><span class="w"> </span><span class="n">AUTUMN</span>
<span class="p">}</span>
</pre></div>
<p>Enum constants are allowed to have constructors, which are called when the class is loaded:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Season</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">WINTER</span><span class="p">(</span><span class="s">"Cold"</span><span class="p">),</span><span class="w"> </span><span class="n">SPRING</span><span class="p">(</span><span class="s">"Warmer"</span><span class="p">),</span><span class="w"> </span><span class="n">SUMMER</span><span class="p">(</span><span class="s">"Hot"</span><span class="p">),</span><span class="w"> </span><span class="n">AUTUMN</span><span class="p">(</span><span class="s">"Cooler"</span><span class="p">);</span>

<span class="w"> </span><span class="n">Season</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">description</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">description</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">description</span><span class="p">;</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getDescription</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">description</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Enumerations can have class bodies, in which case they are treated like anonymous classes extending the enum class:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Season</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">WINTER</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getDescription</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s">"cold"</span><span class="p">;}</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="n">SPRING</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getDescription</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s">"warmer"</span><span class="p">;}</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="n">SUMMER</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getDescription</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s">"hot"</span><span class="p">;}</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="n">FALL</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getDescription</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="s">"cooler"</span><span class="p">;}</span>
<span class="w"> </span><span class="p">};</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Interfaces">Interfaces</h3></div>
<p><a href="Interface_(Java)" title="Interface (Java)">Interfaces</a> are types which contain no fields and usually define a number of methods without an actual implementation. They are useful to define a contract with any number of different implementations. Every interface is implicitly abstract. Interface methods are allowed to have a subset of access modifiers depending on the language version, <code>strictfp</code>, which has the same effect as for classes, and also <code>static</code> since Java SE 8.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">ActionListener</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ACTION_ADD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ACTION_REMOVE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">actionSelected</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">action</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Implementing_an_interface">Implementing an interface</h4></div>
<p>An interface is implemented by a class using the <code>implements</code> keyword. It is allowed to implement more than one interface, in which case they are written after <code>implements</code> keyword in a comma-separated list. A class implementing an interface must override all its methods, otherwise it must be declared as abstract.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">RequestListener</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">requestReceived</span><span class="p">();</span>
<span class="p">}</span>

<span class="kd">class</span> <span class="nc">ActionHandler</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">ActionListener</span><span class="p">,</span><span class="w"> </span><span class="n">RequestListener</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">actionSelected</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">action</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">requestReceived</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">//Calling method defined by interface</span>
<span class="n">RequestListener</span><span class="w"> </span><span class="n">listener</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ActionHandler</span><span class="p">();</span><span class="w"> </span><span class="cm">/*ActionHandler can be</span>
<span class="cm"> represented as RequestListener...*/</span>
<span class="n">listener</span><span class="p">.</span><span class="na">requestReceived</span><span class="p">();</span><span class="w"> </span><span class="cm">/*...and thus is known to implement</span>
<span class="cm"> requestReceived() method*/</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Functional_interfaces_and_lambda_expressions">Functional interfaces and lambda expressions</h4></div>
<p>These features were introduced with the release of Java SE 8. An interface automatically becomes a functional interface if it defines only one method. In this case an implementation can be represented as a lambda expression instead of implementing it in a new class, thus greatly simplifying writing code in the <a href="Functional_programming" title="Functional programming">functional style</a>. Functional interfaces can optionally be annotated with the <code><a href="%40FunctionalInterface" class="mw-redirect" title="@FunctionalInterface">@FunctionalInterface</a></code> annotation, which will tell the compiler to check whether the interface actually conforms to a definition of a functional interface.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// A functional interface</span>
<span class="nd">@FunctionalInterface</span>
<span class="kd">interface</span> <span class="nc">Calculation</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">calculate</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">someNumber</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">someOtherNumber</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// A method which accepts this interface as a parameter</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">runCalculation</span><span class="p">(</span><span class="n">Calculation</span><span class="w"> </span><span class="n">calculation</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">calculation</span><span class="p">.</span><span class="na">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// Using a lambda to call the method</span>
<span class="n">runCalculation</span><span class="p">((</span><span class="n">number</span><span class="p">,</span><span class="w"> </span><span class="n">otherNumber</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">otherNumber</span><span class="p">);</span>

<span class="c1">// Equivalent code which uses an anonymous class instead</span>
<span class="n">runCalculation</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">Calculation</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">calculate</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">someNumber</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">someOtherNumber</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">someNumber</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">someOtherNumber</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">})</span>
</pre></div>
<p>Lambda's parameters types do not have to be fully specified and can be inferred from the interface it implements. Lambda's body can be written without a body block and a <code>return</code> statement if it is only an expression. Also, for those interfaces which only have a single parameter in the method, round brackets can be omitted.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// Same call as above, but with fully specified types and a body block</span>
<span class="n">runCalculation</span><span class="p">((</span><span class="kt">int</span><span class="w"> </span><span class="n">number</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">otherNumber</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">otherNumber</span><span class="p">;</span>
<span class="p">});</span>

<span class="c1">// A functional interface with a method which has only a single parameter</span>
<span class="kd">interface</span> <span class="nc">StringExtender</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">extendString</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">input</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// Initializing a variable of this type by using a lambda</span>
<span class="n">StringExtender</span><span class="w"> </span><span class="n">extender</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">input</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">" Extended"</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Method_references">Method references</h4></div>
<p>It is not necessary to use lambdas when there already is a named method compatible with the interface. This method can be passed instead of a lambda using a method reference. There are several types of method references:
</p>
<table class="wikitable">

<tbody><tr>
<th>Reference type</th>
<th>Example</th>
<th>Equivalent lambda
</th></tr>
<tr>
<td>Static</td>
<td><code>Integer::sum</code></td>
<td><code>(number, otherNumber) -&gt; number + otherNumber</code>
</td></tr>
<tr>
<td>Bound</td>
<td><code>"LongString"::substring</code></td>
<td><code>index -&gt; "LongString".substring(index)</code>
</td></tr>
<tr>
<td>Unbound</td>
<td><code>String::isEmpty</code></td>
<td><code>string -&gt; string.isEmpty()</code>
</td></tr>
<tr>
<td>Class constructor</td>
<td><code>ArrayList&lt;String&gt;::new</code></td>
<td><code>capacity -&gt; new ArrayList&lt;String&gt;(capacity)</code>
</td></tr>
<tr>
<td>Array constructor</td>
<td><code>String[]::new</code></td>
<td><code>size -&gt; new String[size]</code>
</td></tr></tbody></table>
<p>The code above which calls <code>runCalculation</code> could be replaced with the following using the method references:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">runCalculation</span><span class="p">(</span><span class="n">Integer</span><span class="p">::</span><span class="n">sum</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Inheritance_2">Inheritance</h4></div>
<p>Interfaces can inherit from other interfaces just like classes. Unlike classes it is allowed to inherit from multiple interfaces. However, it is possible that several interfaces have a field with the same name, in which case it becomes a single ambiguous member, which cannot be accessed.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* Class implementing this interface must implement methods of both</span>
<span class="cm">ActionListener and RequestListener */</span>
<span class="kd">interface</span> <span class="nc">EventListener</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">ActionListener</span><span class="p">,</span><span class="w"> </span><span class="n">RequestListener</span><span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Default_methods">Default methods</h4></div>
<p>Java SE 8 introduced default methods to interfaces which allows developers to add new methods to existing interfaces without breaking compatibility with the classes already implementing the interface. Unlike regular interface methods, default methods have a body which will get called in the case if the implementing class does not override it.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">StringManipulator</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">extendString</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">input</span><span class="p">);</span>
<span class="w"> </span>
<span class="w"> </span><span class="c1">// A method which is optional to implement</span>
<span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">shortenString</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">input</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">input</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">// This is a valid class despite not implementing all the methods</span>
<span class="kd">class</span> <span class="nc">PartialStringManipulator</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">StringManipulator</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">extendString</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">input</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">input</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">" Extended"</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Static_methods">Static methods</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Method_(computer_programming)#Static_methods" title="Method (computer programming)">Method (computer programming) §&nbsp;Static methods</a></div>
<p>Static methods is another language feature introduced in Java SE 8. They behave in exactly the same way as in the classes.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">StringUtils</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">shortenByOneSymbol</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">input</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">input</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="n">StringUtils</span><span class="p">.</span><span class="na">shortenByOneSymbol</span><span class="p">(</span><span class="s">"Test"</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Private_methods">Private methods</h4></div>
<p>Private methods were added in the Java 9 release. An interface can have a method with a body marked as private, in which case it will not be visible to inheriting classes. It can be called from default methods for the purposes of code reuse.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">Logger</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">logError</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">log</span><span class="p">(</span><span class="n">Level</span><span class="p">.</span><span class="na">ERROR</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">logInfo</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">log</span><span class="p">(</span><span class="n">Level</span><span class="p">.</span><span class="na">INFO</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="n">Level</span><span class="w"> </span><span class="n">level</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">SystemLogger</span><span class="p">.</span><span class="na">log</span><span class="p">(</span><span class="n">level</span><span class="p">.</span><span class="na">id</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Annotations">Annotations</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Java_annotation" title="Java annotation">Java annotation</a></div>
<p>Annotations in Java are a way to embed <a href="Metadata" title="Metadata">metadata</a> into code. This language feature was introduced in <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>.
</p>
<div class="mw-heading mw-heading5"><h5 id="Annotation_types">Annotation types</h5></div>
<p>Java has a set of predefined annotation types, but it is allowed to define new ones. An annotation type declaration is a special type of an interface declaration. They are declared in the same way as the interfaces, except the <code>interface</code> keyword is preceded by the <code>@</code> sign. All annotations are implicitly extended from <code>java.lang.annotation.Annotation</code> and cannot be extended from anything else.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nd">@interface</span><span class="w"> </span><span class="n">BlockingOperations</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<p>Annotations may have the same declarations in the body as the common interfaces, in addition they are allowed to include enums and annotations. The main difference is that abstract method declarations must not have any parameters or throw any exceptions. Also they may have a default value, which is declared using the <code>default</code> keyword after the method name:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nd">@interface</span><span class="w"> </span><span class="n">BlockingOperations</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">fileSystemOperations</span><span class="p">();</span>
<span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">networkOperations</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading5"><h5 id="Usage_of_annotations">Usage of annotations</h5></div>
<p>Annotations may be used in any kind of declaration, whether it is package, class (including enums), interface (including annotations), field, method, parameter, constructor, or local variable. Also they can be used with enum constants. Annotations are declared using the <code>@</code> sign preceding annotation type name, after which element-value pairs are written inside brackets. All elements with no default value must be assigned a value.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nd">@BlockingOperations</span><span class="p">(</span><span class="cm">/*mandatory*/</span><span class="w"> </span><span class="n">fileSystemOperations</span><span class="p">,</span>
<span class="cm">/*optional*/</span><span class="w"> </span><span class="n">networkOperations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">)</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">openOutputStream</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">//Annotated method</span>
<span class="p">}</span>
</pre></div>
<p>Besides the generic form, there are two other forms to declare an annotation, which are shorthands. <i>Marker annotation</i> is a short form, it is used when no values are assigned to elements:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nd">@Unused</span><span class="w"> </span><span class="c1">// Shorthand for @Unused()</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">travelToJupiter</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<p>The other short form is called <i>single element annotation</i>. It is used with annotations types containing only one element or in the case when multiple elements are present, but only one elements lacks a default value. In single element annotation form the element name is omitted and only value is written instead:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* Equivalent for @BlockingOperations(fileSystemOperations = true).</span>
<span class="cm">networkOperations has a default value and</span>
<span class="cm">does not have to be assigned a value */</span>

<span class="nd">@BlockingOperations</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">openOutputStream</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Generics">Generics</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Generics_in_Java" title="Generics in Java">Generics in Java</a></div>
<p><a href="Generic_programming" title="Generic programming">Generics</a>, or parameterized types, or <a href="Parametric_polymorphism" title="Parametric polymorphism">parametric polymorphism</a>, is one of the major features introduced in <a href="J2SE_5.0" class="mw-redirect" title="J2SE 5.0">J2SE 5.0</a>. Before generics were introduced, it was required to declare all the types explicitly. With generics, it became possible to work in a similar manner with different types without declaring the exact types. The main purpose of generics is to ensure type safety and to detect runtime errors during compilation. Unlike C#, information on the used parameters is not available at runtime due to <a href="Type_erasure" title="Type erasure">type erasure</a>.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Generic_classes">Generic classes</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Generics_in_Java#Generic_class_definitions" title="Generics in Java">Generics in Java §&nbsp;Generic class definitions</a></div>
<p>Classes can be parameterized by adding a type variable inside angle brackets (<code>&lt;</code> and <code>&gt;</code>) following the class name. It makes possible the use of this type variable in class members instead of actual types. There can be more than one type variable, in which case they are declared in a comma-separated list.
</p><p>It is possible to limit a type variable to a subtype of some specific class or declare an interface that must be implemented by the type. In this case the type variable is appended by the <code>extends</code> keyword followed by a name of the class or the interface. If the variable is constrained by both class and interface or if there are several interfaces, the class name is written first, followed by interface names with <code>&amp; </code> sign used as the delimiter.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* This class has two type variables, T and V. T must be </span>
<span class="cm">a subtype of ArrayList and implement Formattable interface */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Mapper</span><span class="o">&lt;</span><span class="n">T</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">ArrayList</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="n">Formattable</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">add</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">array</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// array has add method because it is an ArrayList subclass</span>
<span class="w"> </span><span class="n">array</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">item</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>When a variable of a parameterized type is declared or an instance is created, its type is written exactly in the same format as in the class header, except the actual type is written in the place of the type variable declaration.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* Mapper is created with CustomList as T and Integer as V.</span>
<span class="cm">CustomList must be a subclass of ArrayList and implement Formattable */</span>
<span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="n">Integer</span><span class="o">&gt;</span><span class="w"> </span><span class="n">mapper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="n">Integer</span><span class="o">&gt;</span><span class="p">();</span>
</pre></div>
<p>Since Java SE 7, it is possible to use a diamond (<code>&lt;&gt;</code>) in place of type arguments, in which case the latter will be inferred. The following code in Java SE 7 is equivalent to the code in the previous example:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="n">Integer</span><span class="o">&gt;</span><span class="w"> </span><span class="n">mapper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Mapper</span><span class="o">&lt;&gt;</span><span class="p">();</span>
</pre></div>
<p>When declaring a variable for a parameterized type, it is possible to use wildcards instead of explicit type names. Wildcards are expressed by writing <code>?</code> sign instead of the actual type. It is possible to limit possible types to the subclasses or superclasses of some specific class by writing the <code>extends</code> keyword or the <code>super</code> keyword correspondingly followed by the class name.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="cm">/* Any Mapper instance with CustomList as the first parameter</span>
<span class="cm">may be used regardless of the second one.*/</span>
<span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="o">?&gt;</span><span class="w"> </span><span class="n">mapper</span><span class="p">;</span>
<span class="n">mapper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="n">Boolean</span><span class="o">&gt;</span><span class="p">();</span>
<span class="n">mapper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Mapper</span><span class="o">&lt;</span><span class="n">CustomList</span><span class="p">,</span><span class="w"> </span><span class="n">Integer</span><span class="o">&gt;</span><span class="p">();</span>

<span class="cm">/* Will not accept types that use anything but</span>
<span class="cm">a subclass of Number as the second parameter */</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">addMapper</span><span class="p">(</span><span class="n">Mapper</span><span class="o">&lt;?</span><span class="p">,</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Number</span><span class="o">&gt;</span><span class="w"> </span><span class="n">mapper</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Generic_methods_and_constructors">Generic methods and constructors</h3></div>
<p>Usage of generics may be limited to some particular methods, this concept applies to constructors as well. To declare a parameterized method, type variables are written before the return type of the method in the same format as for the generic classes. In the case of constructor, type variables are declared before the constructor name.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Mapper</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// The class itself is not generic, the constructor is</span>
<span class="w"> </span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">Mapper</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">array</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="cm">/* This method will accept only arrays of the same type as</span>
<span class="cm">the searched item type or its subtype*/</span>
<span class="kd">static</span><span class="w"> </span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">contains</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">V</span><span class="o">[]</span><span class="w"> </span><span class="n">arr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">currentItem</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">arr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">currentItem</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Generic_interfaces">Generic interfaces</h3></div>
<p>Interfaces can be parameterized in the similar manner as the classes.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">interface</span> <span class="nc">Expandable</span><span class="o">&lt;</span><span class="n">T</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Number</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addItem</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">item</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// This class is parameterized</span>
<span class="kd">class</span> <span class="nc">Array</span><span class="o">&lt;</span><span class="n">T</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Number</span><span class="o">&gt;</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Expandable</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addItem</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="c1">// And this is not and uses an explicit type instead</span>
<span class="kd">class</span> <span class="nc">IntegerArray</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Expandable</span><span class="o">&lt;</span><span class="n">Integer</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addItem</span><span class="p">(</span><span class="n">Integer</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java Platform, Standard Edition</a></li>
<li><a href="C_Sharp_syntax" title="C Sharp syntax">C Sharp syntax</a></li>
<li><a href="C%2B%2B_syntax" title="C++ syntax">C++ syntax</a></li>
<li><a href="C_syntax" title="C syntax">C syntax</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html">"Operators (The Java™ Tutorials &gt; Learning the Java Language &gt; Language Basics)"</a>. <i>docs.oracle.com</i>. Oracle and/or its affiliates. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150624161036/http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html">Archived</a> from the original on June 24, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">June 16,</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html">"The switch Statement (The Java™ Tutorials &gt; Learning the Java Language &gt; Language Basics)"</a>. <i>docs.oracle.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100315060844/http://java.sun.com/docs/books/tutorial/java/nutsandbolts/switch.html">Archived</a> from the original on March 15, 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">August 15,</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFOwens" class="citation web cs1">Owens, Sean. <a rel="nofollow" class="external text" href="http://darksleep.com/player/JavaAndUnsignedTypes.html">"Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090220171410/http://darksleep.com/player/JavaAndUnsignedTypes.html">Archived</a> from the original on February 20, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">April 21,</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html">"Primitive Data Types"</a>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html">"Chapter 8. Classes"</a>. <i>docs.oracle.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">April 25,</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/IandI/final.html">"Writing Final Classes and Methods"</a>. <i>docs.oracle.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">April 25,</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090208100217/http://www.ibm.com/developerworks/java/library/j-jtp1029.html">"Java theory and practice: Is that your final answer?"</a>. <i>developer.ibm.com</i>. Archived from <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/java/library/j-jtp1029.html">the original</a> on February 8, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">April 25,</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">"Lambda Expressions (The Java™ Tutorials &gt; Learning the Java Language &gt; Classes and Objects)"</a>. <i>docs.oracle.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200616055353/https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">Archived</a> from the original on June 16, 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">August 8,</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx">"Generics in the Run Time (C# Programming Guide)"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160310012449/https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx">Archived</a> from the original on March 10, 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">March 9,</span> 2016</span>.</cite></span>
</li>
</ol></div></div>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */


.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}


/* end https://en.wikipedia.org/ */
</style><div class="refbegin" style="">
<ul><li><cite id="CITEREFNaughtonSchildt1999" class="citation book cs1"><a href="Patrick_Naughton" class="new" title="Patrick Naughton (page does not exist)">Naughton, Patrick</a>; <a href="Herbert_Schildt" title="Herbert Schildt">Schildt, Herbert</a> (1999). <i>Java 2: The Complete Reference</i> (3rd&nbsp;ed.). The McGraw-Hill Companies. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-07-211976-4</bdi>.</cite></li>
<li><cite id="CITEREFVermeulenAmblerBumgardnerMetz2000" class="citation book cs1">Vermeulen; Ambler; Bumgardner; Metz; Misfeldt; Shur; Thompson (2000). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/elementsofjavast00verm"><i>The Elements of Java Style</i></a></span>. Cambridge University Press. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-521-77768-2</bdi>.</cite></li>
<li><cite id="CITEREFGoslingJoySteeleBracha2005" class="citation book cs1"><a href="James_Gosling" title="James Gosling">Gosling, James</a>; <a href="Bill_Joy" title="Bill Joy">Joy, Bill</a>; <a href="Guy_L._Steele_Jr." title="Guy L. Steele Jr.">Steele, Guy</a>; Bracha, Gilad (2005). <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jls/"><i>Java Language Specification</i></a> (3rd&nbsp;ed.). Addison-Wesley Professional. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090226152425/http://java.sun.com/docs/books/jls/">Archived</a> from the original on February 26, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">December 3,</span> 2008</span>.</cite></li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */


.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */


@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}


/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */


.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}


/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikibooks has a book on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/Java_Programming/Syntax" class="extiw external" title="wikibooks:Java Programming/Syntax">Java Programming/Syntax</a></b></i></div></div>
</div>
<ul><li><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/specs/">The Java Language Specification, Third edition</a> Authoritative description of the Java language</li>
<li><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/">Java SE 24 API Javadocs</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_(software_platform)419" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Java_(software_platform)419" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java (software platform)</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platforms</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_virtual_machine" title="Java virtual machine">JVM</a></li>
<li><a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a> (Micro)</li>
<li><a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> (Standard)</li>
<li><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (Enterprise)</li>
<li><a href="Java_Card" title="Java Card">Java Card</a></li>
<li><a href="Android_software_development#SDK" title="Android software development">Android SDK</a></li>
<li><a href="GraalVM" title="GraalVM">GraalVM</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="5" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Technologies</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Oracle</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Squawk_virtual_machine" title="Squawk virtual machine">Squawk</a></li>
<li><a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a></li>
<li><a href="OpenJDK" title="OpenJDK">OpenJDK</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Maxine_Virtual_Machine" title="Maxine Virtual Machine">Maxine VM</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platform</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Applets</a></li>
<li><a href="Jakarta_Servlet" title="Jakarta Servlet">Servlets</a></li>
<li><a href="MIDlet" title="MIDlet">MIDlets</a></li>
<li><a href="Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a></li>
<li><a href="Jakarta_Faces" title="Jakarta Faces">JSF</a></li>
<li><a href="Java_Web_Start" title="Java Web Start">Web Start</a> (JNLP)</li>
<li><a href="Pack200" title="Pack200">Pack200</a></li>
<li><a href="Java_Platform_Module_System" title="Java Platform Module System">Modules</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Major<br>third-party</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Blackdown_Java" title="Blackdown Java">Blackdown</a></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li>
<li><a href="GNU_Classpath" title="GNU Classpath">GNU Classpath</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li>
<li><a href="Apache_Harmony" title="Apache Harmony">Harmony</a></li>
<li><a href="Hibernate_(framework)" title="Hibernate (framework)">Hibernate</a></li>
<li><a href="IcedTea" title="IcedTea">IcedTea</a></li>
<li><a href="Jazelle" title="Jazelle">Jazelle</a></li>
<li><a href="Spring_Framework" title="Spring Framework">Spring</a></li>
<li><a href="Apache_Struts" title="Apache Struts">Struts</a></li>
<li><a href="Oracle_TopLink" title="Oracle TopLink">TopLink</a></li>
<li><a href="WildFly" title="WildFly">WildFly</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">History</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_version_history" title="Java version history">Java version history</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></li>
<li><a href="Free_Java_implementations" title="Free Java implementations">Free Java implementations</a></li>
<li>Slogan: <i><a href="Write_once%2C_run_anywhere" title="Write once, run anywhere">Write once, run anywhere</a></i></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="List_of_JVM_languages" title="List of JVM languages">JVM<br>languages</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="BeanShell" title="BeanShell">BeanShell</a></li>
<li><a href="Clojure" title="Clojure">Clojure</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a></li>
<li><a href="JRuby" title="JRuby">JRuby</a></li>
<li><a href="Jython" title="Jython">Jython</a></li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li>
<li><a href="Processing" title="Processing">Processing</a></li>
<li><a href="Rhino_(JavaScript_engine)" title="Rhino (JavaScript engine)">Rhino</a></li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a></li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Community</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Conferences</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaOne" title="JavaOne">JavaOne</a></li>
<li><a href="Devoxx" title="Devoxx">Devoxx</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></li>
<li><a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="Sun_Microsystems_Laboratories" class="mw-redirect" title="Sun Microsystems Laboratories">Sun Microsystems Laboratories</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="James_Gosling" title="James Gosling">James Gosling</a></li>
<li><a href="Arthur_van_Hoff" title="Arthur van Hoff">Arthur van Hoff</a></li>
<li><a href="Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li>
<li><a href="Patrick_Naughton" class="new" title="Patrick Naughton (page does not exist)">Patrick Naughton</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b> • <span class="nowrap"><span class="skin-invert-image noviewer" typeof="mw:File"></span> </span><a href="Portal%3AComputer_programming" title="Portal:Computer programming">Computer programming portal</a></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-13" href="https://en.wikipedia.org/wiki/?title=Java_syntax&amp;oldid=1300342497">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>